{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "# K-Means Clustering Example"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Let's make some fake data that includes people clustered by income and age, randomly:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "from numpy import random, array\n",
    "\n",
    "#Create fake income/age clusters for N people in k clusters\n",
    "def createClusteredData(N, k):\n",
    "    random.seed(10)\n",
    "    pointsPerCluster = float(N)/k\n",
    "    X = []\n",
    "    for i in range (k):\n",
    "        incomeCentroid = random.uniform(20000.0, 200000.0)\n",
    "        ageCentroid = random.uniform(20.0, 70.0)\n",
    "        for j in range(int(pointsPerCluster)):\n",
    "            X.append([random.normal(incomeCentroid, 10000.0), random.normal(ageCentroid, 2.0)])\n",
    "    X = array(X)\n",
    "    return X"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "We'll use k-means to rediscover these clusters in unsupervised learning:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n",
      " 1 1 1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n",
      " 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x196feaac898>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "\n",
    "from sklearn.cluster import KMeans\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.preprocessing import scale\n",
    "from numpy import random, float\n",
    "\n",
    "data = createClusteredData(100, 5)\n",
    "\n",
    "model = KMeans(n_clusters=5)\n",
    "\n",
    "# Note I'm scaling the data to normalize it! Important for good results.\n",
    "model = model.fit(scale(data))\n",
    "\n",
    "# We can look at the clusters each data point was assigned to\n",
    "print(model.labels_)\n",
    "\n",
    "# And we'll visualize it:\n",
    "plt.figure(figsize=(8, 6))\n",
    "plt.scatter(data[:,0], data[:,1], c=model.labels_.astype(float))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "## Activity"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Things to play with: what happens if you don't scale the data? What happens if you choose different values of K? In the real world, you won't know the \"right\" value of K to start with - you'll need to converge on it yourself."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
